import { z } from 'zod'

// 机构
export const createDeptSchema = z.object({
  dept_name: z.string().min(1, '机构名称不能为空'),
});

// 新增字典
export const createDictSchema = z.object({
  dict_id: z.string().min(1, '字典ID不能为空'),
  dict_name: z.string().min(1, '字典名称不能为空'),
  dict_type: z.string().min(1, '字典类型不能为空')
});

// 新增通知
export const createNoticeSchema = z.object({
  title: z.string().min(1, '通知标题不能为空'),
  content: z.string().min(1, '通知内容不能为空'),
  notice_type: z.enum(['info', 'warning', 'error', 'success']).optional(),
  priority: z.number().int().min(0).max(2).optional(),
  send_type: z.enum(['manual', 'scheduled', 'system']).optional(),
  send_time: z.string().nullable().optional(),
  send_config: z.any().optional(),
  target_type: z.enum(['user', 'role', 'dept', 'all']).optional(),
  target_ids: z.array(z.union([z.number(), z.string()])).optional(),
});

// 更新通知
export const updateNoticeSchema = z.object({
  id: z.number().int().positive('通知ID必须为正整数'),
  title: z.string().min(1, '通知标题不能为空').optional(),
  content: z.string().min(1, '通知内容不能为空').optional(),
  notice_type: z.enum(['info', 'warning', 'error', 'success']).optional(),
  priority: z.number().int().min(0).max(2).optional(),
  send_type: z.enum(['manual', 'scheduled', 'system']).optional(),
  send_time: z.string().nullable().optional(),
  send_config: z.any().optional(),
  target_type: z.enum(['user', 'role', 'dept', 'all']).optional(),
  target_ids: z.array(z.union([z.number(), z.string()])).optional(),
});

export const createRoleSchema = z.object({
    role_name: z.string().min(1, { message: "角色名称不能为空" }),
    role_key: z.string().min(1, { message: "角色标识不能为空" }),
    status: z.number().int().optional(),
    description: z.string().optional(),
    permissions: z.array(z.number()).optional(),
});

export const updateRoleSchema = z.object({
    id: z.number().int(),
    role_name: z.string().min(1, { message: "角色名称不能为空" }).optional(),
    role_key: z.string().min(1, { message: "角色标识不能为空" }).optional(),
    status: z.number().int().optional(),
    description: z.string().optional(),
    permissions: z.array(z.number()).optional(),
});
